package edu.neu.swc.cloud.dao;

import edu.neu.swc.cloud.domain.Equipment;
import edu.neu.swc.cloud.domain.Rent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


@Mapper
public interface EquipmentDao {

    /**
     * 查询所有的设备信息
     * SQL:select * from equip
     * @return
     */
    List<Equipment> findAll();

    /**
     * 依据所属工厂的id
     * SQL:select * from equip where equ_fac_id = ?
     * @param fac_id
     * @return
     */
    List<Equipment> findEquByFacId(int fac_id);

    /**
     * 添加设备
     * @param equipment
     */
    void addEquipment(Equipment equipment);

    /**
     * 依据ID删除设备
     * @param equ_id
     */
    void deleteEquipmentById(int equ_id);

    /**
     * 修改设备信息
     * @param equipment
     */
    void updateEquipment(Equipment equipment);

    /**
     * 依据设备ID关闭设备
     * @param equ_id
     */
    void shutDownById(int equ_id);

    /**
     * 依据设备ID打开设备
     * @param equ_id
     */
    void startUpById(int equ_id);

    /**
     * 依据ID查询设备
     * @param equ_id
     * @return
     */
    Equipment findEquById(int equ_id);

    /**
     * 按条件，多字段查询设备
     * @param equipment
     * @return
     */
    List<Equipment> findEquByCon(Equipment equipment);

    /**
     * 找到所有的可租用设备
     * @return
     */
    List<Equipment> findEquipAvail();

    /**
     * 修改设备状态和租用的工厂ID
     * @param rent
     */
    void setRentById(Rent rent);

    /**
     * 修改设备状态和所属工厂
     * @param equ_id
     */
    void setBackById(int equ_id);

    /**
     * 获取满足条件设备数目
     * @param eq_name
     * @return
     */
    int getEquipCounts(@Param("eq_name") String eq_name);

    /**
     * 获取满足条件的设备记录
     * @param eq_name
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Equipment> findEquipByQuery(@Param("eq_name") String eq_name,
                                     @Param("pageStart") int pageStart,
                                     @Param("pageSize") int pageSize);

    /**
     * 找到满足条件的设备数目
     * @param eq_name
     * @param fac_id
     * @return
     */
    int getMyEquipCounts(@Param("eq_name") String eq_name,
                         @Param("fac_id") int fac_id);

    /**
     * 找到所有满足条件的设备
     * @param eq_name
     * @param fac_id
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Equipment> findMyEquipByQuery(@Param("eq_name") String eq_name,
                                       @Param("fac_id") int fac_id,
                                       @Param("pageStart") int pageStart,
                                       @Param("pageSize") int pageSize);

    /**
     * 添加租用信息对应关系
     * @param eq_id
     * @param eq_fac_id
     */
    void addOwnRel(@Param("eq_id") int eq_id,
                   @Param("eq_fac_id") int eq_fac_id);

    /**
     * 依据设备编号查找设备信息
     * @param eq_code
     * @return
     */
    Equipment findEquByCode(String eq_code);
}
